package com.jnetwork.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

import com.jnetwork.exception.DAOExcepcion;
import com.jnetwork.modelo.CentroFormacion;
import com.jnetwork.modelo.Idea;
import com.jnetwork.modelo.Usuario;
import com.jnetwork.util.ConexionBD;

public class ReporteDAO extends BaseDAO{
	
	
	public Collection<Idea> listar(Integer centroInfoId, String titulo, String descripcion, String estado, String archivo,Date fechaInicio, Date fechaFin,String key1, String key2, String key3, String key4) throws DAOExcepcion {
		

		Collection<Idea> c = new ArrayList<Idea>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select i.id, i.titulo, i.descripcion,i.estado,i.archivo,i.fecha,i.key1,i.key2,i.key3,i.key4,i.asesor,usuario_id "
					+ "from idea i "
					+"left join usuario u on i.usuario_id=u.id "
					+"where u.centro_formacion_id=? and (fecha between ? and ?) and (estado like ? or titulo like ? or descripcion like ? or key1 like ? or key2 like ? or key3 like ? or key4 like ? ) ";
			stmt = con.prepareStatement(query);
			stmt.setInt(1, centroInfoId);
			stmt.setString(2, titulo);
			stmt.setString(3, descripcion);
			stmt.setString(4, estado);
			stmt.setTimestamp(5, new Timestamp((new Date()).getTime()));
			stmt.setTimestamp(6, new Timestamp((new Date()).getTime()));
			stmt.setString(7, key1);
			stmt.setString(8, key2);
			stmt.setString(9, key3);
			stmt.setString(10, key4);
			
			
			rs = stmt.executeQuery();
			while (rs.next()) {
				Idea vo = new Idea();
				vo.setId(rs.getInt("id"));
				vo.setTitulo(rs.getString("titulo"));
				vo.setDescripcion(rs.getString("descripcion"));
				vo.setEstado(rs.getString("estado"));
				vo.setArchivo(rs.getString("archivo"));
				vo.setFecha(rs.getDate("fecha"));
				vo.setKey1(rs.getString("key1"));
				vo.setKey2(rs.getString("key2"));
				vo.setKey3(rs.getString("key3"));
				vo.setKey4(rs.getString("key4"));
				Usuario asesor=new Usuario();
				asesor.setId(rs.getInt("asesor"));
				vo.setAsesor(asesor);
				vo.setId(rs.getInt("usuario_id"));
				c.add(vo);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}
	
	public Collection<Idea> buscarIdea(String titulo, String descripcion, String key1,String key2, String key3, String key4 )
			throws DAOExcepcion {
		String query = "select i.id, i.titulo, i.descripcion,i.estado,i.archivo,i.fecha,i.key1,i.key2,i.key3,i.key4,i.asesor,usuario_id "
				+ "from idea i "
				//+"left join usuario u on i.usuario_id=u.id "
				+"where titulo like ? or descripcion like ? or key1 like ? or key2 like ? or key3 like ? or key4 like ? ";
		Collection<Idea> lista = new ArrayList<Idea>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, "%" + titulo + "%");
			stmt.setString(2, "%" + descripcion + "%");
			stmt.setString(3, "%" + key1 + "%");
			stmt.setString(4, "%" + key2 + "%");
			stmt.setString(5, "%" + key3 + "%");
			stmt.setString(6, "%" + key4 + "%");
			
			rs = stmt.executeQuery();
			while (rs.next()) {
				Idea vo = new Idea();
				vo.setTitulo(rs.getString("titulo"));
				vo.setDescripcion(rs.getString("descripcion"));
				vo.setKey1(rs.getString("key1"));
				vo.setKey2(rs.getString("key2"));
				vo.setKey3(rs.getString("key3"));
				vo.setKey4(rs.getString("key4"));
				
				
				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}
	
}
